package com.hanamaki.demo02;

import org.checkerframework.checker.nullness.compatqual.NullableDecl;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.util.Arrays;
import java.util.Set;
import java.util.concurrent.TimeUnit;

public class FireFoxDriverWaitTime04 {

    WebDriver webDriver;

    @BeforeClass
    public void setup() {
        System.setProperty("webdriver.gecko.driver", "C:\\Program Files\\Mozilla Firefox\\geckodriver.exe");
        webDriver = new FirefoxDriver();

        /* 想要使用 隐式等待 可以直接声名 */
//        为 页面中 全部的 元素 进行  等待时间
        webDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
//        为 页面中的 异步 脚本 添加的 隐式等待
        webDriver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS);
//        为页面中的  页面刷新 添加等待时间
        webDriver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
    }

    /**
     * 强制等待
     */
    @Test
    public void test(){

        webDriver.get("file:///D:/SoftWare/apache-tomcat-9.0.56/webapps/testhtml/exam/index.html");

        WebElement element = webDriver.findElement(By.xpath("//a"));
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        element.click();


    }

    /**
     * 显示等待
     */
    @Test
    public void test1(){

        webDriver.get("file:///D:/SoftWare/apache-tomcat-9.0.56/webapps/testhtml/exam/index.html");

        /* 显示等待 是为 某一个 特定的  元素进行的时间等待 */
        /* 1。使用  WebDriverWait 对象 */
        WebDriverWait webDriverWait = new WebDriverWait(webDriver, 30, 1);
        WebElement element = webDriverWait.until(new ExpectedCondition<WebElement>() {
            @NullableDecl
            public WebElement apply(@NullableDecl WebDriver webDriver) {
                return webDriver.findElement(By.xpath("//a"));
            }
        });

        element.click();


    }

    /**
     * 隐式等待
     * 全局使用
     */
    @Test
    public void test2(){

        webDriver.get("file:///D:/SoftWare/apache-tomcat-9.0.56/webapps/testhtml/exam/index.html");


        WebElement element = webDriver.findElement(By.xpath("//a1"));


    }

    @AfterClass
    public void close() {
//        driver.close();
    }


}
